1. Model介绍
Written: 2026.06 一个 AI 应用的核心就是它所依赖的大语言模型,LangChain作为一个“工具”,不提供任何 LLMs,而是依赖于第三方集成各种大模型。比如,将 OpenAI、Anthropic、Hugging Face 、LlaMA、阿里Qwen、ChatGLM等平台的模型无缝接入到你的应用 LangChain 模型接口可参考官方文档:https://reference.langchain.com/python/langchain_core/language_models/1.1 Model的分类
LangChain中将大语言模型分为以下几种,我们主要使用的是聊天模型:| 模型类型 | 输入形式 | 输出形式 | 主要特点 | 典型适用场景 |
|---|---|---|---|---|
| LLM | 纯文本字符串 | 文本字符串 | 基础文本生成模型;无上下文记忆;高速、轻量 | 单轮问答;摘要生成;文本改写/扩写;指令执行 |
| ChatModel | 消息列表,例如 List[BaseMessage],包含 HumanMessage、SystemMessage、AIMessage 等 | 聊天消息对象,例如 AIMessage | 面向对话场景;支持多轮上下文;更贴近人类对话逻辑 | 智能助手;客服机器人;多轮推理任务;LangChain Agent 工具调用 |
| Embeddings | 文本字符串或列表,例如 str 或 List[str] | 向量,例如 List[float] 或 ndarray | 将文本转化为语义向量;可用于相似度搜索;通常不生成文本 | RAG 文本检索增强;知识库问答;聚类、分类、推荐系统 |
1.2 Model 继承关系
在 LangChain 的类结构中,顶层基类是BaseLanguageModel,用于定义模型的通用接口。它分为两支:BaseChatModel 和 BaseLLM
接入聊天模型时需继承 BaseChatModel,如常用的 ChatOpenAI;而文本生成模型则继承 BaseLLM,如 OpenAI
1.3 Chat Model 主要参数
在构建聊天模型时,有一些标准化参数:| 参数名 | 参数含义 |
|---|---|
model | 指定使用的大语言模型名称(如 "gpt-4"、"gpt-3.5-turbo" 等) |
temperature | 温度,温度越高,输出内容越随机;温度越低,输出内容越确定 |
timeout | 请求超时时间 |
max_tokens | 生成内容的最大token数 |
stop | 模型在生成时遇到这些“停止词”将立刻停止生成,常用于控制输出的边界 |
max_retries | 最大重试请求次数 |
api_key | 大模型供应商提供的API秘钥 |
base_url | 大模型供应商API 请求地址 |
langchain-openai、langchain-anthropic)生效,在langchain-community包中的第三方模型,则不需要遵守这些标准化参数的规则
1.4 Message组件
调用模型后返回了一条AI消息,在LangChain中,消息有几种不同的类型。所有消息都有type 、 content 、 response_metadata 等属性
| 属性名 | 属性作用 |
|---|---|
type | 描述了是哪个类型的消息,包含类型有”user”、“ai”、“system” 和 “tool” |
content | 通常是字符串,有些情况下可能是字典列表,这个字典列表用于大模型的多模态输出。 |
name | 用来区分当消息类型相同,对消息进行区分,但不是所有模型都支持这一功能。 |
response_metadata | AI消息才会包含的属性,大语言模型的响应中附加元数据,根据不同模型会有不同,如可能会包含本次 token 使用量等信息。 |
tool_calls | AI消息才会包含的属性,当大语言模型决定调用工具时,在 AIMessage 中就会包含这个属性,可以通过 .tool_calls 属性进行获取该属性返回一个 ToolCall 列表,每个 ToolCall 是一个字典,包含以下字段:name :应调用的工具名args : 调用工具的参数id : 工具调用的唯一标识 ID |
2. 开发环境配置
2.1 创建项目
推荐使用 uv 初始化并管理项目,uv 具体操作可参考文档:https://www.cuiliangblog.cn/detail/section/228701279uv 快速搭建 LangChain 环境
2.2 创建密钥环境变量
创建.env文件
.env 文件内容:
通过 python-dotenv 库读取 env 文件中的环境变量,并加载到当前运行的环境中
3. 接入大模型
3.1 接入 Ollama
参考文档:https://python.langchain.com/docs/integrations/chat/ollama/接入Ollama
执行结果如下
3.2 接入 DeepSeek
参考文档:https://python.langchain.com/api_reference/deepseek/chat_models/langchain_deepseek.chat_models.ChatDeepSeek.html 申请地址:https://platform.deepseek.com/ 支持模型列表-
deepseek-chat:通用对话模型 -
deepseek-coder:偏向代码理解与生成 -
deepseek-llm:较大通用模型(如 DeepSeek-VL) -
deepseek-moe:Mixture of Experts 多专家模型
接入DeepSeek
3.3 接入通义千问
参考文档:https://python.langchain.com/api_reference/community/chat_models/langchain_community.chat_models.tongyi.ChatTongyi.html 申请地址:https://dashscope.console.aliyun.com/overview接入Qwen
3.4 接入 openAI
参考文档:https://python.langchain.com/docs/integrations/chat/ 申请地址:https://platform.openai.com/account/api-keys 需要注意的是国内网络原因不能直接调用,可以通过第三方平台调用。例如https://closeapi.net/接入OpenAI
4. 模型调用方法
4.1 对话模型
聊天模型,除了将字符串作为输入外,还可以使用聊天消息作为输入,并返回聊天消息作为输出。LangChain有一些内置的消息类型:-
HumanMessage:人类消息,type为”user”,表示来自用户输入。比如“实现 一个快速排序方法”。 -
AIMessage: AI 消息,type为”ai”,这可以是文本,也可以是调用工具的请求。 -
SystemMessage:系统消息,type为”system”,告诉大模型当前的背景是什么,应该如何做,并不是所有模型提供商都支持这个消息类型 -
ToolMessage/FunctionMessage:工具消息,type为”tool”,用于函数调用结果的消息类型 -
ChatMessage:可以自定义角色的通用消息类型。
调用ChatModel(对话模型)
执行结果如下
4.2 流式输出
在Langchain中,语言模型的输出分为了两种主要的模式:流式输出与非流式输出 非流式输出:这是Langchain与LLM交互时的默认行为,是最简单、最稳定的语言模型调用方式。当用户发出请求后,系统在后台等待模型生成完整响应,然后一次性将全部结果返回。 举例:用户提问,请编写一首诗,系统在静默数秒后突然弹出了完整的诗歌。(体验较单调) 在大多数问答、摘要、信息抽取类任务中,非流式输出提供了结构清晰、逻辑完整的结果,适合快速集成和部署。 流式输出:一种更具交互感的模型输出方式,用户不再需要等待完整答案,而是能看到模型逐个token 地实时返回内容。 举例:用户提问,请编写一首诗,当问题刚刚发送,系统就开始一字一句(逐个token)进行回复,感觉是一边思考一边输出。更像是“实时对话”,更为贴近人类交互的习惯,更有吸引力。适合构建强调“实时反馈”的应用,如聊天机器人、写作助手等。 Langchain 中通过设置 stream=True 并配合 回调机制 来启用流式输出。 通过 model.stream 方法即可实现流式调用,代码如下:设置为流式输出
执行结果如下
4.3 批量调用
LangChain 支持 批量调用(Batch Inference),也就是一次性向模型提交多个输入并并行处理,从而显著提升吞吐量。 当你需要让模型处理多条输入时,比如:文本摘要批量生成、多轮任务预处理逐条.invoke() 会导致网络请求多次、速度慢、成本高等问题,而LangChain 提供的 **.batch()** 接口 能在内部自动并行执行。
进行批量调用
执行结果如下
4.4 异步调用
LangChain 提供ainvoke() 异步调用接口,用于在 异步环境(async/await) 中高效并行地执行模型推理。
它的核心作用是:让你同时调用多个模型请求而不阻塞主线程 —— 特别适合大批量请求或 Web 服务场景(如 FastAPI)
执行异步调用
执行结果如下

